import axios, { AxiosResponse } from 'axios'
import useUserStore from '@/store/user'

let userStore: any = undefined

// 创建实例
const service = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL,
  timeout: 10000,
})

// 请求拦截
service.interceptors.request.use(
  config => {
    if (!userStore) {
      userStore = useUserStore()
    }
    // 请求头中添加 token 的传递
    const token = userStore.token
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }

    return config
  }
)

// 响应拦截
service.interceptors.response.use(
  (response: AxiosResponse<IResponseData>) => {
    // status 是 http 状态码
    // data 是后端响应返回的数据，规范格式为 { code, data, message }
    const {status, data: responseData} = response

    if (status >= 200 && status < 300) {
      // 从响应返回的数据中解构使用的值
      const {code, data, message} = responseData
      if (code === 200) {
        return data
      }

      return Promise.reject(new Error(message))
    }
  }
)

export default service